package ig.ejb.metrica.da.util;


import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.sql.Timestamp;

/**
 * The Data Transfer Object class.
 * Created 1/08/2006 05:33:03 PM
 * @author jsanchez
 */
public class EspeciesposicionesDTO implements java.io.Serializable {
    
    private java.lang.Integer id;
    private java.sql.Timestamp fechaCorte;
    private java.lang.Double valornominal;
    private java.lang.String tipo;
    private java.lang.String isinEspecie;
    private java.lang.String nombreProducto;
    private java.lang.String unidades;
    private Timestamp fechaInicial;
    private java.lang.Double saldoMora;
    private java.lang.Integer alturaMora;
    private java.lang.Double saldoActual;
    
    private boolean dirty = false; //dirty flag
    
    
    public EspeciesposicionesDTO(){
    }

    public double getSaldoActual() {
        return saldoActual;
    }

    public void setSaldoActual(double saldoActual) {
        this.saldoActual = saldoActual;
    }
    

    public void setSaldoMora(double saldoMora) {
        this.saldoMora = saldoMora;
    }

    public void setFechaInicial(Timestamp fechaInicial) {
        this.fechaInicial = fechaInicial;
    }

    public void setAlturaMora(int alturaMora) {
        this.alturaMora = alturaMora;
    }

    public double getSaldoMora() {
        return saldoMora;
    }

    public Timestamp getFechaInicial() {
        return fechaInicial;
    }

    public int getAlturaMora() {
        return alturaMora;
    }

    public EspeciesposicionesDTO(java.lang.Integer id, java.sql.Timestamp fechaCorte, java.lang.Double valornominal, java.lang.String tipo, java.lang.String isinEspecie, java.lang.String nombreProducto, java.lang.String unidades,Timestamp fechaInicial,Double saldoMora,Integer alturaMora,Double saldoActual){
        this.id = id;
        this.fechaCorte = fechaCorte;
        this.valornominal = valornominal;
        this.tipo = tipo;
        this.isinEspecie = isinEspecie;
        this.nombreProducto = nombreProducto;
        this.unidades = unidades;
        this.fechaInicial=fechaInicial;
        this.saldoMora=saldoMora;
        this.alturaMora=alturaMora;
        this.saldoActual=saldoActual;
    }
    
    private void setDirty(){
        dirty = true;
    }
    
    public boolean isDirty(){
        return dirty;
    }
    
    public void resetDirty(){
        dirty = false;
    }
    
    public java.lang.Integer getId(){ return id; }
    public void setId(java.lang.Integer id){
        this.id = id;
        setDirty();
    }
    
    public java.sql.Timestamp getFechaCorte(){ return fechaCorte; }
    public void setFechaCorte(java.sql.Timestamp fechaCorte){
        this.fechaCorte = fechaCorte;
        setDirty();
    }
    
    public java.lang.Double getValornominal(){ return valornominal; }
    public void setValornominal(java.lang.Double valornominal){
        this.valornominal = valornominal;
        setDirty();
    }
    
    public java.lang.String getTipo(){ return tipo; }
    public void setTipo(java.lang.String tipo){
        this.tipo = tipo;
        setDirty();
    }
    
    public java.lang.String getIsinEspecie(){ return isinEspecie; }
    public void setIsinEspecie(java.lang.String isinEspecie){
        this.isinEspecie = isinEspecie;
        setDirty();
    }
    
    public java.lang.String getNombreProducto(){ return nombreProducto; }
    public void setNombreProducto(java.lang.String nombreProducto){
        this.nombreProducto = nombreProducto;
        setDirty();
    }
    
    public java.lang.String getUnidades(){ return unidades; }
    public void setUnidades(java.lang.String unidades){
        this.unidades = unidades;
        setDirty();
    }
    
    
    // populate DTO from Object
//    public void populate(Object o) {
//        Method[] methods = o.getClass().getMethods();
//        for (int i = 0; i < methods.length; i++) {
//            try{
//                String methodName = methods[i].getName();
//                if ((methodName.startsWith("get") ||
//                        methodName.startsWith("is"))
//                        && Modifier.isPublic(methods[i].getModifiers())
//                        && methods[i].getParameterTypes().length == 0
//                        && !methodName.equals("getClass")) {
//                    String setMethodName = methodName.replaceFirst(methodName.startsWith("get")?"get":"is","set");
//                    getClass().getMethod(setMethodName,new Class[]{methods[i].getReturnType()}).
//                            invoke(this, new Object[]{methods[i].invoke(o,null)});
//                }
//            }catch(IllegalAccessException ilE){
//                ilE.printStackTrace();
//            }catch(InvocationTargetException invE){
//                invE.printStackTrace();
//            }catch(NoSuchMethodException noE){
//                // Don't find setMethod for field
//            }
//        }
//    }
    
    
    /**
     * @see java.lang.Object#toString()
     */
    public String toString(){
        return getClass().getName() + "[" +
                "id: " + this.id + ", " +
                "fechaCorte: " + this.fechaCorte + ", " +
                "valornominal: " + this.valornominal + ", " +
                "tipo: " + this.tipo + ", " +
                "isinEspecie: " + this.isinEspecie + ", " +
                "nombreProducto: " + this.nombreProducto + ", " +
                "unidades: " + this.unidades + "]";
    }
    
    /**
     * @see java.lang.Object#equals(java.lang.Object)
     */
    public boolean equals(java.lang.Object otherOb) {
        
        if (this == otherOb) {
            return true;
        }
        if (!(otherOb instanceof ig.ejb.metrica.da.util.EspeciesposicionesDTO)) {
            return false;
        }
        ig.ejb.metrica.da.util.EspeciesposicionesDTO other = (ig.ejb.metrica.da.util.EspeciesposicionesDTO) otherOb;
        return (
                
                (id==null?other.id==null:id.equals(other.id))
                &&
                (fechaCorte==null?other.fechaCorte==null:fechaCorte.equals(other.fechaCorte))
                &&
                (valornominal==null?other.valornominal==null:valornominal.equals(other.valornominal))
                &&
                (tipo==null?other.tipo==null:tipo.equals(other.tipo))
                &&
                (isinEspecie==null?other.isinEspecie==null:isinEspecie.equals(other.isinEspecie))
                &&
                (nombreProducto==null?other.nombreProducto==null:nombreProducto.equals(other.nombreProducto))
                &&
                (unidades==null?other.unidades==null:unidades.equals(other.unidades))
                
                );
    }
    
    /**
     * @see java.lang.Object#hashCode()
     */
    public int hashCode() {
        return (
                
                (id==null?0:id.hashCode())
                ^
                (fechaCorte==null?0:fechaCorte.hashCode())
                ^
                (valornominal==null?0:valornominal.hashCode())
                ^
                (tipo==null?0:tipo.hashCode())
                ^
                (isinEspecie==null?0:isinEspecie.hashCode())
                ^
                (nombreProducto==null?0:nombreProducto.hashCode())
                ^
                (unidades==null?0:unidades.hashCode())
                ^
                (fechaInicial==null?0:fechaInicial.hashCode())
                ^
                (saldoMora==null?0:saldoMora.hashCode())
                ^
                (alturaMora==null?0:alturaMora.hashCode())                
                ^
                (saldoActual==null?0:saldoActual.hashCode())
                );
    }
    
}
